/*Esta es una clase de patron Singleton*/

package gestoresPasajeros;

import Control.EntityMan;
import Control.LocalidadJpaController;
import Control.PaisJpaController;
import Control.ProvinciaJpaController;
import Entidades.Localidad;
import Entidades.Pais;
import Entidades.Provincia;

import java.util.ArrayList;
import java.util.List;

public class NomencladorGeografico {
    
    private List<Pais> listadoPais;
    private List<Provincia> listadoProvincia;
    private List<Localidad> listadoLocalidad;
    
    private static NomencladorGeografico unSingleton=new NomencladorGeografico ();
    private NomencladorGeografico (){
        inicializar();
        
        
        
    }
    public static NomencladorGeografico getInstance(){
    return unSingleton;}
    
       /*metodo inicializador*/
     
      private void inicializar(){
          listadoPais=obtenerPais();
          listadoProvincia=obtenerProvincia();
          listadoLocalidad=obtenerLocalidad();
      } 
      
    /*metodos que obtienen los campos de la BD*/
         private List <Pais> obtenerPais(){
        PaisJpaController t= new PaisJpaController(EntityMan.getInstance());
        List<Pais> returno= new ArrayList<>();
                for (Pais unPais:  t.findPaisEntities()){
                    returno.add(unPais);
                    
                }
                return returno;
     }
               private List <Provincia> obtenerProvincia(){
        ProvinciaJpaController t= new ProvinciaJpaController(EntityMan.getInstance());
        List<Provincia> returno= new ArrayList<>();
                for (Provincia unaProvincia:  t.findProvinciaEntities()){
                    returno.add(unaProvincia);
                    
                }
                return returno;
     }
                     private List <Localidad> obtenerLocalidad(){
       LocalidadJpaController t= new  LocalidadJpaController(EntityMan.getInstance());
        List<Localidad> returno= new ArrayList<>();
                for ( Localidad unaLocalidad:  t.findLocalidadEntities()){
                    returno.add(unaLocalidad);
                    
                }
                return returno;
     }
                     
                 /*metodos nomencladores de Objetos*/
     public List<Pais> getObjetosPais() {
         return listadoPais;}
     public List<Provincia> getObjetosProvincia() {
        return listadoProvincia;}
     public List<Localidad> getObjetosLocalidad() {
     return listadoLocalidad;}
           
      
      /*metodos nomencladores de String para COMBOBOX*/
    public List<String> getListadoPais(){
            List <String> r=new ArrayList();
    
         for ( Pais unPais: listadoPais ){
                    r.add(unPais.getNombre().toUpperCase());}
         return r;
        
}
     public List<String> getListadoProvinciaPorPais(String unPais){
            List <String> r=new ArrayList();
    
         for ( Provincia unaProv: listadoProvincia ){
            if(unaProv.getPais().getNombre().toUpperCase().equals(unPais)){
           
                    r.add(unaProv.getNombre().toUpperCase());}}
         return r;
         
        
}
      public List<String> getListadoLocalidadPorProvincia(String unaProvincia){
            List <String> r=new ArrayList();
            
    
         for ( Localidad unaLoc: listadoLocalidad ){
             if(unaLoc.getProvincia().getNombre().toUpperCase().equals(unaProvincia)){
                    r.add(unaLoc.getNombre().toUpperCase());}}
         return r;
        
}
    
        public Localidad getLocalidad(String nomPais,String nomProv, String nomLoc){
               for(Localidad p:listadoLocalidad){
              if(p.getNombre().toUpperCase().equals(nomLoc)&&p.getProvincia().getNombre().toUpperCase().equals(nomProv)&&p.getProvincia().getPais().getNombre().toUpperCase().equals(nomPais))
                  return p;
          }
           return null;
      } 
      
   
}

